package main;

import pojo.ConfigPoJo;
import pojo.RequestDetailPoJo;
import pojo.RequestPoJo;
import pojo.ServiceDesc;
import util.*;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 程序入口
 */
public class Run {

    private static ConfigPoJo configPoJo;
    // 读取配置文件
    static {
        try {
            configPoJo = ConfigUtil.getConfig();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        // 下载日志文件到本地
        LinuxUtil.downLoadTodayLog();
        // 清洗本地文件日志（清洗后的文件对应会生成一个xxxx.db文件，下次运行时不再解析）
        Map<String, Set<RequestPoJo>> paramMap = DataCleaningUtil.save();
        // 执行测试用例，并生成两个结果文件，统计结果文件和执行明细文件 （1、Result-yyyy-MM-dd-HH-mm-ss.xlsx 2、Detail-yyyy-MM-dd-HH-mm-ss.xlsx）
        List<RequestDetailPoJo> requestDetailPoJoList = new ArrayList<>();
        List<ServiceDesc> existList = PostAutoUtil.run(paramMap, requestDetailPoJoList);
        // 生成执行统计Excel
        String now = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date());
        CodeExcelUtil.list2File2(existList, configPoJo.getResultPath() +"Result" + now +".xlsx");
        // 生成执行明细Excel
        // 填充对比信息
        if ("y".equals(configPoJo.getCompa())) {
            CompaUtil.fillPostCompa(requestDetailPoJoList);
        }
        // 防止导出excel时result字段字符过多
        subContentLength(requestDetailPoJoList);
        CodeExcelUtil.list2File2(requestDetailPoJoList, configPoJo.getResultPath() +"ResultDetail" + now +".xlsx");
        // 生成postMan参数文件
        PostManUtil.writerFile();
    }

    /**
     * 判断result和CompaResult字段，超过1000就截取
     * @param list
     */
    public static void subContentLength(List<RequestDetailPoJo> list) {
        for (RequestDetailPoJo pojo : list) {
            if (pojo.getResult().length() > 1000) {
                pojo.setResult(pojo.getResult().substring(0,1000));
            }
            if (pojo.getCompaResult().length() > 1000) {
                pojo.setCompaResult(pojo.getCompaResult().substring(0,1000));
            }
        }
    }
}
